package com.func.domain.strategy.service.armory;

import java.util.Date;

/**
 * @ClassName IStrategyDispatch
 * @Description 策略抽奖的调度, 执行抽奖行为
 * @Author: func
 * @Date 2025/2/21 21:04
 * @Version 1.0
 */

public interface IStrategyDispatch {
    /**
     * 执行一次查询
     * @param strategyId
     * @return 抽到的奖品ID
     */
    Integer getRandomAwardId(Long strategyId);

    /**
     * 带有权重地执行一次抽奖, 通过从对应的带有ruleWeight的table中的查找, 从而实现在权重范围内查询
     * @param strategyId
     * @param ruleWeightValue 权重描述字符串
     * @return 抽到的奖品ID
     */
    Integer getRandomAwardId(Long strategyId, String ruleWeightValue);

    /**
     * 将Redis中的缓存的库存--
     *
     * @param strategyId
     * @param awardId
     * @param endDateTime
     * @return 是否删减成功, 也就这个库存值是不是删减过
     */
    Boolean subtractionAwardStock(Long strategyId, Integer awardId, Date endDateTime);
}
